This project uses the Ubicom SX28 micro controller to made a digital reverb and echo effect from an audio signal . It is for beginners, that want to learn more about A/D conversion, read and write SRAM's and digital audio basics.
Reverb is one of the most interesting aspects of digital signal processing effects for audio. It is a form of processing that is well-suited to digital processing, while being completely impractical with analog electronics. Because of this, digital signal processing has had a profound affect on our ability to place elements of our music into different "spaces."
Before digital processing, reverb was created by using transducers--a speaker and a microphone, essentially--at two ends of a physical delay element. That delay element was typically a set of metal springs, a suspended metal plate, or an actual room. The physical delay element offered little variation in the control of the reverb sound. And these reverb "spaces" weren't very portable; spring reverb was the only practically portable--and generally affordable--option, but they were the least acceptable in terms of sound.
First a quick look at what reverb is: Natural reverberation is the result of sound reflecting off surfaces in a confined space. Sound emanates from its source at 1100 feet per second, and strikes wall surfaces, reflecting off them at various angles. Some of these reflections meet your ears immediately ("early reflections"), while others continue to bounce off other surfaces until meeting your ears. Hard and massive surfaces--concrete walls, for instance--reflect the sound with modest attenuation, while softer surfaces absorb much of the sound, especially the high frequency components. The combination of room size, complexity and angle of the walls and room contents, and the density of the surfaces dictate the room's "sound."
In the digital domain, raw delay time is limited only by available memory, and the number of reflections and simulation of frequency-dependent effects (filtering) are limited only by processing speed. And talking about speed ... that is not our problem with SX28 running at 50Mhz (50 MIPS).
Obviously, digital signal processing means too much that we can do in this project with a micro controller but with an SRAM helping us and some latches we could play a lot, trying different programming.
The circuit is too much simple, like we are using an SX28 processor we need to add some latches 74HC373 in this case to get a bigger number of I/O available, perhaps an SX48 or 52 could be better to get an smaller board and to avoid some connections lines.
We have too an SRAM, to save the samples that we'll get with an serial A/D converter, SRAM is 32K x 8 in this case, but you could change it by an 64K SRAM because we have one address line unused at one 74HC373, I used an MS62256 taken it from an older 486 PC motherboard (cache memory) so this SRAM is enough fast to this application (20 nSec access time).
The A/D converter could be any serial A/D with a good speed for audio applications, I used the ADC08831 that give me about 180 KSPS. Like we'll take samples at minus than 50Khz it is enough for us.
Analog part could be any that provide an low impedance output, a high voltage level and a DC coupling, I used two transistors to amplify a condenser MIC audio signal and to get the DC coupling variable through a middle point of a preset ( It must be 2.5 V ), I used too an DC-DC converter to get the correct +Vcc for preamplifier and isolation for the analog ground. ( This reduce the noise ).
Like we must let the audio signal to mix with the delayed out signal , I used a .01 cap between grounds to join them in AC.
Like we have digital samples of the input audio signal, at the end, we must add a D/A converter to get it analog again, so you could use any D/A converter that you could get, in this case I used a simple R-2R ladder to make an elemental D/A converter and a .01 cap to get the low pass filter that we need at end out stage, you could use a low pass filter made with any audio operational amplifier. The R-2R with the .01 cap is enough to get a demo circuit.
The SX software (reverb.src) is too much simple, it has the necessary routines to write and read the SRAM, and to make the A/D conversion .
There are too a main part that is divided in two subparts, one is for reverb effect and the another is for echo effect, the RB.7 pin was used to get the external control, to change from, reverb to echo effect.
The main portion of the reverb effect loops sampling data and saving it in the SRAM, sending it then to the output, while checking for previous savings in the SRAM, five times, to get the delays for the samples previously saved in the memory.
Echo part is similar but I only used more delay in readings to get the echo, remember that the original signal is mixed at the output.
The final results was VERY GOOD considering the simple realization and the short programming.
I give you the ideas and tools, to put your hands on it, and get different experiences changing the programming.
[I have also included a second program (playing.src)] that let's you [make some] funny effects. One is dividing by two the frequency input signal and the another is duplicating it, getting a very funny effect. In these cases is recommended to cut the connection between the input and output. In other words: Stop the original audio signal from arriving at the output, so only digital signal gets out.
Questions: